# @Time : 2024-10-24 15:35
# @Author : Fioman 
# @Phone : 13149920693
"""
按照存储的内容的类型可以分为容器序列,偏平序列
容器序列: 存放的元素内容可以是不同的类型: list,tuple,collections.deque
扁平序列: 存放的元素内容只能是同种类型,有的甚至是固定的 str,bytes,bytearray,array.array

按照可变序列和不可变序列划分
可变序列: list,bytearray,collections.deque,array.array
不可变序列: str,bytes,tuple
"""
from collections import deque

myList = [1, "1", "1.23", set([1, 2, 3]), dict(), list()]  # 容器序列list
print(myList)
myList[3] = None  # 可变序列list,元素可以改变
print(myList)

myTuple = (1, "2", dict(), set(), tuple(), list())  # 容器序列tuple
print(myTuple)
# myTuple[3] = None  # 不可变序列,元素的内容不可以改变

myDeque = deque()
myDeque.append(1)
myDeque.append("2")
myDeque.append(dict())
myDeque.append(deque())
print(myDeque)  # 容器序列deque
myDeque[2] = 30  # 元素的内容可以被修改 可变序列deque
print(myDeque)

str = "abc"  # 只能是字符 扁平序列
# str[0] = 10  # 不可变序列 str 赋值报错

bytesVal = bytes(str, "utf-8")  # bytes里面的元素只能是字符串,扁平序列
print(bytesVal)
# bytesVal[0] = "a"  # 不可以修改 ,不可变序列bytes

byteArray = bytearray(str, encoding="utf-8")  # 扁平序列,只能是字符串
print(byteArray)
byteArray[0] = 123  # 只能赋值为整数,然后它会转换为对应的字节码(0,256) 如果不在范围内也报错
print(byteArray)  # 可以改变其元素的内容, 可变序列

from array import array

intArray = array("i", [1, 2, 3])  # 偏平序列,只能存放相同类型
floatArray = array("f", [1.2, 2.3, 3.4])
print(intArray)
print(floatArray)
intArray[1] = 100  # 可以修改元素,可变的扁平序列
print(intArray)

"""
序列与abc模块的关系:
Python 的 collections.abc 模块定义了一组抽象基类（ABC),所有的序列类型都继承自 
collections.abc.Sequence 类。

序列与 collections.abc.Sequence 的关系
collections.abc.Sequence 是一个抽象基类，它定义了所有序列应具备的行为，比如索引、迭代、长度等。
可变序列进一步继承自 collections.abc.MutableSequence，而不可变序列则直接继承自 Sequence。

collections.abc.Sequence：提供了 __getitem__() 和 __len__() 等方法的抽象基类，所有的序列类型都应
实现这些方法。
collections.abc.MutableSequence：进一步扩展了 Sequence，定义了修改序列内容的接口
（如 __setitem__()、__delitem__()、insert() 等）。
"""
